package com.blogs.web.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @Author: xiaokai
 * @Description:
 * @Date: 2019/8/8
 * @Version: 1.0
 */
public class ListMian {

    //ArrayList：是非线程安全
    //Vector：是线程安全 （注意要加上线程同步锁，不然会报异常）
    //CopyOnWriteArrayList：线程安全，实现的方式是concurrent包

    public static void main(String[] args) {
        //初始化一个list，放入5个元素
        final List<Integer> list = new CopyOnWriteArrayList<>();
        for (int i = 0; i < 5; i++) {
            list.add(i);

        }

        //线程1、通多Iterator遍历List
        new Thread(new Runnable() {
            @Override
            public void run() {
//                synchronized (list) {
                for (int item : list) {
                        System.out.println("遍历元素：" + item);
                        // 由于程序跑的太快，这里sleep了1秒来调慢程序的运行速度
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
//                        }
                    }
                }
            }
        }).start();

        //线程2、remove一个元素
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 由于程序跑的太快，这里sleep了1秒来调慢程序的运行速度
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                list.remove(4);
                System.out.println("list.remove(4)");
            }
        }).start();
    }

}
